<?php

/**
 * PRESTAMO actions.
 *
 * @package    OPENBIBLIOSOFT
 * @subpackage PRESTAMO
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 12479 2008-10-31 10:54:40Z fabien $
 */
class PRESTAMOActions extends sfActions
{
 /**
  * Executes index action
  *
  * @param sfRequest $request A request object
  */
  public function executeIndex(sfWebRequest $request)
  {
    if($this->getUser()->getAttribute('codigoUsuario') == null)
	{
		return  $this->renderText("<script type='text/javascript'> window.location = 'Entrada'; </script> ");
	}
  }
	
	public function executeListar()
	{
		$buscar = $this->getRequestParameter('Busqueda');
		$buscar = "%".$buscar."%";
		$campo = $this->getRequestParameter('Campo');
		
		$conexion = new Criteria();
		
		if($campo == 'IdUsuario')
		{ 
			$conexion->addJoin(EjemplarPeer::IDEJEMPLAR, OrdenprestamoPeer::IDEJEMPLAR);
			$conexion->addJoin(OrdenprestamoPeer::NUMEROORDEN, PrestamoPeer::NUMEROORDEN);
			$conexion->add(PrestamoPeer::CODIGOUSUARIO, $buscar, Criteria::LIKE);
		}
		if($campo == 'IdOrdenPrestamo')
		{ 
			$conexion->addJoin(EjemplarPeer::IDEJEMPLAR, OrdenprestamoPeer::IDEJEMPLAR);
			$conexion->add(OrdenprestamoPeer::NUMEROORDEN, $buscar, Criteria::LIKE);
		}
		if($campo == 'IdEjemplar'){ $conexion->add(EjemplarPeer::IDEJEMPLAR, $buscar, Criteria::LIKE);}
		if($campo == 'Isbn'){ $conexion->add(EjemplarPeer::ISBN, $buscar, Criteria::LIKE);}
		if($campo == 'Titulo')
		{
			$conexion->addJoin(EjemplarPeer::ISBN, LibroPeer::ISBN);
			$conexion->add(LibroPeer::TITULO, $buscar, Criteria::LIKE);
		}
		if($campo == 'Estado'){ $conexion->add(EjemplarPeer::ESTADO, $buscar, Criteria::LIKE);}
		if($campo == 'Todos')
		{
			$conexion->addJoin(EjemplarPeer::IDEJEMPLAR, OrdenprestamoPeer::IDEJEMPLAR);
			$conexion->addJoin(OrdenprestamoPeer::NUMEROORDEN, PrestamoPeer::NUMEROORDEN);
			$conexion->addJoin(EjemplarPeer::ISBN, LibroPeer::ISBN);
			
			$c1 = $conexion->getNewCriterion(EjemplarPeer::ISBN, $buscar, Criteria::LIKE);
			$c2 = $conexion->getNewCriterion(EjemplarPeer::ESTADO, $buscar, Criteria::LIKE);
			$c3 = $conexion->getNewCriterion(EjemplarPeer::IDEJEMPLAR, $buscar, Criteria::LIKE);
			$c4 = $conexion->getNewCriterion(OrdenprestamoPeer::NUMEROORDEN, $buscar, Criteria::LIKE);
			$c5 = $conexion->getNewCriterion(LibroPeer::TITULO, $buscar, Criteria::LIKE);
			$c6 = $conexion->getNewCriterion(PrestamoPeer::CODIGOUSUARIO, $buscar, Criteria::LIKE);
			$c5->addOr($c6);
			$c4->addOr($c5);
			$c3->addOr($c4);
			$c2->addOr($c3);
			$c1->addOr($c2);
			$conexion->add($c1);
		}
		
		$numeroEjemplares = EjemplarPeer::doCount($conexion);
		$conexion->setLimit($this->getRequestParameter('limit'));
		$conexion->setOffset($this->getRequestParameter('start'));
		$prestamos = EjemplarPeer::doSelect($conexion);
		$pos = 0;
		$nbrows=0;
		$datos;
		
		foreach ($prestamos As $temporal)
		{
			$numOrden=$this->getNumOrden($temporal->getIdejemplar());
			$datos[$pos]['prestamoNumeroOrden']=$numOrden;
			$datos[$pos]['prestamoId']=$temporal->getIdejemplar();
			$datos[$pos]['prestamoIsbn']=$temporal->getIsbn();
			$datos[$pos]['prestamoTitulo']=$temporal->getLibro()->getTitulo();
			$datos[$pos]['prestamoEstado']=$temporal->getEstado();
			$datos[$pos]['prestamoCodigoUsuario']=$this->getCodigoUsuario($numOrden);
			
			$pos++;
			$nbrows++;
		}
		
		if($nbrows>0){
			$jsonresult = json_encode($datos);
			return  $this->renderText('({"total":"'.$numeroEjemplares.'","results":'.$jsonresult.'})');
		}
		else {
			return  $this->renderText('({"total":"0", "results":""})');
		}
	}
	
	public function getCodigoUsuario($numOrden)
	{
		$conexion = new Criteria();
		$conexion->add(PrestamoPeer::NUMEROORDEN, $numOrden);
		$codigoUsuario;
		
		if($conexion)
		{
			$prestamo=PrestamoPeer::doSelectOne($conexion);
			
			if($prestamo)
			{
				$codigoUsuario=$prestamo->getCodigousuario();
			}
			else
			{
				$codigoUsuario = '';
			}
		}
		return $codigoUsuario;
	}
	
	public function getNumOrden($idEjemplar)
	{
		$conexion = new Criteria();
		$conexion->add(OrdenprestamoPeer::IDEJEMPLAR, $idEjemplar);
		$numOrden;
		
		if($conexion)
		{
			$orden=OrdenprestamoPeer::doSelectOne($conexion);
			
			if($orden)
			{
				$numOrden=$orden->getNumeroorden();
			}
			else
			{
				$numOrden = 'sin reserva';
			}
		}
		return $numOrden;
	}
	
	public function executePrestar()
	{
		$idEjemplar = $this->getRequestParameter('IdEjemplar');
		$numeroOrden = $this->getRequestParameter('NumeroOrden');
		$codigoUsuario = $this->getRequestParameter('CodigoUsuario');
		$fechaEntrega = $this->getRequestParameter('FechaEntrega');
		
		try
		{
			if($numeroOrden != 'sin reserva')
			{
				$prestamo = new Prestamo();
				$prestamo->setNumeroorden($numeroOrden);
				$prestamo->setFechaentrega($fechaEntrega);
				$prestamo->setCodigobibliotecario($this->getUser()->getAttribute('codigoUsuario'));
				$prestamo->setCodigousuario($codigoUsuario);
			}
			else
			{
				$ordenprestamo = new Ordenprestamo();
				$ordenprestamo->setIdejemplar($idEjemplar);
				$ordenprestamo->setFecha(time());
				
				$ejemplar = EjemplarPeer::retrieveByPK($idEjemplar);
				$ordenprestamo->save();
				$ejemplar->setEstado('Reservado');
				$ejemplar->save();
				$idPrestamo=$ordenprestamo->getNumeroorden();
			
				$prestamo = new Prestamo();
				$prestamo->setNumeroorden($idPrestamo);
				$prestamo->setFechaentrega($fechaEntrega);
				$prestamo->setCodigobibliotecario($this->getUser()->getAttribute('codigoUsuario'));
				$prestamo->setCodigousuario($codigoUsuario);
			}

			$ejemplar = EjemplarPeer::retrieveByPK($idEjemplar);
			$prestamo->save();
			$ejemplar->setEstado('Prestado');
			$ejemplar->save();
		}
		catch (Exception $excepcion)
		{
			return  $this->renderText("({success: false, errors: { reason: 'Exception: Hubo un problema haciendo el prestamo'}})");
		}
		return  $this->renderText("({success: true, mensaje:'El prestamo fue hecho exitosamente'})");
	}
	
	public function executeEntregar()
	{
		$idEjemplar = $this->getRequestParameter('IdEjemplar');
		$numeroOrden = $this->getRequestParameter('NumeroOrden');
		
		//$orden = OrdenprestamoPeer::retrieveByPK($numeroOrden);
		$ejemplar = EjemplarPeer::retrieveByPK($idEjemplar);
		
		$c = new Criteria();
		$c->add( PrestamoPeer::NUMEROORDEN, $numeroOrden );
		$prestamo = PrestamoPeer::doSelectOne($c);		
		
		if( $prestamo->esVencido() ){
			$multa = new Multas();
			$multa->setCodigo($prestamo->getCodigousuario());
			$multa->setValor( $prestamo->getValorMulta() );
			
			try{
				$multa->save();
			}catch(Exception $excepcion){
				return  $this->renderText("({success: false, errors: { reason: 'Exception: Problema al crear multa de la entrega'}})");
			}
		}
		
		$timeZone = new DateTimeZone('America/Bogota');
		$hoy = new DateTime("NOW", $timeZone);
		$prestamo->setFechadevolucion($hoy);
		
		try
		{
			//$orden->delete();
			$ejemplar->setEstado('Disponible');
			$ejemplar->save();
			$prestamo->save();
		}
		catch(Exception $excepcion)
		{
			return  $this->renderText("({success: false, errors: { reason: 'Exception: Hubo un problema haciendo la entrega'}})");
		}
		return  $this->renderText("({success: true, mensaje:'La entrega fue hecha exitosamente'})");
	}
}
